export const input = {
  id: 'https://spec.openapis.org/oas/3.0/schema/2019-04-02',
  $schema: 'http://json-schema.org/draft-04/schema#',
  description: 'Validation schema for OpenAPI Specification 3.0.X.',
  type: 'object',
  required: ['openapi', 'info', 'paths'],
  properties: {
    openapi: {
      type: 'string',
      pattern: '^3\\.0\\.\\d(-.+)?$',
    },
    info: {
      $ref: '#/definitions/Info',
    },
    externalDocs: {
      $ref: '#/definitions/ExternalDocumentation',
    },
    servers: {
      type: 'array',
      items: {
        $ref: '#/definitions/Server',
      },
    },
    security: {
      type: 'array',
      items: {
        $ref: '#/definitions/SecurityRequirement',
      },
    },
    tags: {
      type: 'array',
      items: {
        $ref: '#/definitions/Tag',
      },
      uniqueItems: true,
    },
    paths: {
      $ref: '#/definitions/Paths',
    },
    components: {
      $ref: '#/definitions/Components',
    },
  },
  patternProperties: {
    '^x-': {},
  },
  additionalProperties: false,
  definitions: {
    Reference: {
      type: 'object',
      required: ['$ref'],
      patternProperties: {
        '^\\$ref$': {
          type: 'string',
          format: 'uri-reference',
        },
      },
    },
    Info: {
      type: 'object',
      required: ['title', 'version'],
      properties: {
        title: {
          type: 'string',
        },
        description: {
          type: 'string',
        },
        termsOfService: {
          type: 'string',
          format: 'uri-reference',
        },
        contact: {
          $ref: '#/definitions/Contact',
        },
        license: {
          $ref: '#/definitions/License',
        },
        version: {
          type: 'string',
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    Contact: {
      type: 'object',
      properties: {
        name: {
          type: 'string',
        },
        url: {
          type: 'string',
          format: 'uri-reference',
        },
        email: {
          type: 'string',
          format: 'email',
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    License: {
      type: 'object',
      required: ['name'],
      properties: {
        name: {
          type: 'string',
        },
        url: {
          type: 'string',
          format: 'uri-reference',
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    Server: {
      type: 'object',
      required: ['url'],
      properties: {
        url: {
          type: 'string',
        },
        description: {
          type: 'string',
        },
        variables: {
          type: 'object',
          additionalProperties: {
            $ref: '#/definitions/ServerVariable',
          },
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    ServerVariable: {
      type: 'object',
      required: ['default'],
      properties: {
        enum: {
          type: 'array',
          items: {
            type: 'string',
          },
        },
        default: {
          type: 'string',
        },
        description: {
          type: 'string',
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    Components: {
      type: 'object',
      properties: {
        schemas: {
          type: 'object',
          patternProperties: {
            '^[a-zA-Z0-9\\.\\-_]+$': {
              oneOf: [
                {
                  $ref: '#/definitions/Schema',
                },
                {
                  $ref: '#/definitions/Reference',
                },
              ],
            },
          },
        },
        responses: {
          type: 'object',
          patternProperties: {
            '^[a-zA-Z0-9\\.\\-_]+$': {
              oneOf: [
                {
                  $ref: '#/definitions/Reference',
                },
                {
                  $ref: '#/definitions/Response',
                },
              ],
            },
          },
        },
        parameters: {
          type: 'object',
          patternProperties: {
            '^[a-zA-Z0-9\\.\\-_]+$': {
              oneOf: [
                {
                  $ref: '#/definitions/Reference',
                },
                {
                  $ref: '#/definitions/Parameter',
                },
              ],
            },
          },
        },
        examples: {
          type: 'object',
          patternProperties: {
            '^[a-zA-Z0-9\\.\\-_]+$': {
              oneOf: [
                {
                  $ref: '#/definitions/Reference',
                },
                {
                  $ref: '#/definitions/Example',
                },
              ],
            },
          },
        },
        requestBodies: {
          type: 'object',
          patternProperties: {
            '^[a-zA-Z0-9\\.\\-_]+$': {
              oneOf: [
                {
                  $ref: '#/definitions/Reference',
                },
                {
                  $ref: '#/definitions/RequestBody',
                },
              ],
            },
          },
        },
        headers: {
          type: 'object',
          patternProperties: {
            '^[a-zA-Z0-9\\.\\-_]+$': {
              oneOf: [
                {
                  $ref: '#/definitions/Reference',
                },
                {
                  $ref: '#/definitions/Header',
                },
              ],
            },
          },
        },
        securitySchemes: {
          type: 'object',
          patternProperties: {
            '^[a-zA-Z0-9\\.\\-_]+$': {
              oneOf: [
                {
                  $ref: '#/definitions/Reference',
                },
                {
                  $ref: '#/definitions/SecurityScheme',
                },
              ],
            },
          },
        },
        links: {
          type: 'object',
          patternProperties: {
            '^[a-zA-Z0-9\\.\\-_]+$': {
              oneOf: [
                {
                  $ref: '#/definitions/Reference',
                },
                {
                  $ref: '#/definitions/Link',
                },
              ],
            },
          },
        },
        callbacks: {
          type: 'object',
          patternProperties: {
            '^[a-zA-Z0-9\\.\\-_]+$': {
              oneOf: [
                {
                  $ref: '#/definitions/Reference',
                },
                {
                  $ref: '#/definitions/Callback',
                },
              ],
            },
          },
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    Schema: {
      type: 'object',
      properties: {
        title: {
          type: 'string',
        },
        multipleOf: {
          type: 'number',
          minimum: 0,
          exclusiveMinimum: true,
        },
        maximum: {
          type: 'number',
        },
        exclusiveMaximum: {
          type: 'boolean',
          default: false,
        },
        minimum: {
          type: 'number',
        },
        exclusiveMinimum: {
          type: 'boolean',
          default: false,
        },
        maxLength: {
          type: 'integer',
          minimum: 0,
        },
        minLength: {
          type: 'integer',
          minimum: 0,
          default: 0,
        },
        pattern: {
          type: 'string',
          format: 'regex',
        },
        maxItems: {
          type: 'integer',
          minimum: 0,
        },
        minItems: {
          type: 'integer',
          minimum: 0,
          default: 0,
        },
        uniqueItems: {
          type: 'boolean',
          default: false,
        },
        maxProperties: {
          type: 'integer',
          minimum: 0,
        },
        minProperties: {
          type: 'integer',
          minimum: 0,
          default: 0,
        },
        required: {
          type: 'array',
          items: {
            type: 'string',
          },
          minItems: 1,
          uniqueItems: true,
        },
        enum: {
          type: 'array',
          items: {},
          minItems: 1,
          uniqueItems: false,
        },
        type: {
          type: 'string',
          enum: ['array', 'boolean', 'integer', 'number', 'object', 'string'],
        },
        not: {
          oneOf: [
            {
              $ref: '#/definitions/Schema',
            },
            {
              $ref: '#/definitions/Reference',
            },
          ],
        },
        allOf: {
          type: 'array',
          items: {
            oneOf: [
              {
                $ref: '#/definitions/Schema',
              },
              {
                $ref: '#/definitions/Reference',
              },
            ],
          },
        },
        oneOf: {
          type: 'array',
          items: {
            oneOf: [
              {
                $ref: '#/definitions/Schema',
              },
              {
                $ref: '#/definitions/Reference',
              },
            ],
          },
        },
        anyOf: {
          type: 'array',
          items: {
            oneOf: [
              {
                $ref: '#/definitions/Schema',
              },
              {
                $ref: '#/definitions/Reference',
              },
            ],
          },
        },
        items: {
          oneOf: [
            {
              $ref: '#/definitions/Schema',
            },
            {
              $ref: '#/definitions/Reference',
            },
          ],
        },
        properties: {
          type: 'object',
          additionalProperties: {
            oneOf: [
              {
                $ref: '#/definitions/Schema',
              },
              {
                $ref: '#/definitions/Reference',
              },
            ],
          },
        },
        additionalProperties: {
          oneOf: [
            {
              $ref: '#/definitions/Schema',
            },
            {
              $ref: '#/definitions/Reference',
            },
            {
              type: 'boolean',
            },
          ],
          default: true,
        },
        description: {
          type: 'string',
        },
        format: {
          type: 'string',
        },
        default: {},
        nullable: {
          type: 'boolean',
          default: false,
        },
        discriminator: {
          $ref: '#/definitions/Discriminator',
        },
        readOnly: {
          type: 'boolean',
          default: false,
        },
        writeOnly: {
          type: 'boolean',
          default: false,
        },
        example: {},
        externalDocs: {
          $ref: '#/definitions/ExternalDocumentation',
        },
        deprecated: {
          type: 'boolean',
          default: false,
        },
        xml: {
          $ref: '#/definitions/XML',
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    Discriminator: {
      type: 'object',
      required: ['propertyName'],
      properties: {
        propertyName: {
          type: 'string',
        },
        mapping: {
          type: 'object',
          additionalProperties: {
            type: 'string',
          },
        },
      },
    },
    XML: {
      type: 'object',
      properties: {
        name: {
          type: 'string',
        },
        namespace: {
          type: 'string',
          format: 'uri',
        },
        prefix: {
          type: 'string',
        },
        attribute: {
          type: 'boolean',
          default: false,
        },
        wrapped: {
          type: 'boolean',
          default: false,
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    Response: {
      type: 'object',
      required: ['description'],
      properties: {
        description: {
          type: 'string',
        },
        headers: {
          type: 'object',
          additionalProperties: {
            oneOf: [
              {
                $ref: '#/definitions/Header',
              },
              {
                $ref: '#/definitions/Reference',
              },
            ],
          },
        },
        content: {
          type: 'object',
          additionalProperties: {
            $ref: '#/definitions/MediaType',
          },
        },
        links: {
          type: 'object',
          additionalProperties: {
            oneOf: [
              {
                $ref: '#/definitions/Link',
              },
              {
                $ref: '#/definitions/Reference',
              },
            ],
          },
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    MediaType: {
      type: 'object',
      properties: {
        schema: {
          oneOf: [
            {
              $ref: '#/definitions/Schema',
            },
            {
              $ref: '#/definitions/Reference',
            },
          ],
        },
        example: {},
        examples: {
          type: 'object',
          additionalProperties: {
            oneOf: [
              {
                $ref: '#/definitions/Example',
              },
              {
                $ref: '#/definitions/Reference',
              },
            ],
          },
        },
        encoding: {
          type: 'object',
          additionalProperties: {
            $ref: '#/definitions/Encoding',
          },
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
      allOf: [
        {
          $ref: '#/definitions/ExampleXORExamples',
        },
      ],
    },
    Example: {
      type: 'object',
      properties: {
        summary: {
          type: 'string',
        },
        description: {
          type: 'string',
        },
        value: {},
        externalValue: {
          type: 'string',
          format: 'uri-reference',
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    Header: {
      type: 'object',
      properties: {
        description: {
          type: 'string',
        },
        required: {
          type: 'boolean',
          default: false,
        },
        deprecated: {
          type: 'boolean',
          default: false,
        },
        allowEmptyValue: {
          type: 'boolean',
          default: false,
        },
        style: {
          type: 'string',
          enum: ['simple'],
          default: 'simple',
        },
        explode: {
          type: 'boolean',
        },
        allowReserved: {
          type: 'boolean',
          default: false,
        },
        schema: {
          oneOf: [
            {
              $ref: '#/definitions/Schema',
            },
            {
              $ref: '#/definitions/Reference',
            },
          ],
        },
        content: {
          type: 'object',
          additionalProperties: {
            $ref: '#/definitions/MediaType',
          },
          minProperties: 1,
          maxProperties: 1,
        },
        example: {},
        examples: {
          type: 'object',
          additionalProperties: {
            oneOf: [
              {
                $ref: '#/definitions/Example',
              },
              {
                $ref: '#/definitions/Reference',
              },
            ],
          },
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
      allOf: [
        {
          $ref: '#/definitions/ExampleXORExamples',
        },
        {
          $ref: '#/definitions/SchemaXORContent',
        },
      ],
    },
    Paths: {
      type: 'object',
      patternProperties: {
        '^\\/': {
          $ref: '#/definitions/PathItem',
        },
        '^x-': {},
      },
      additionalProperties: false,
    },
    PathItem: {
      type: 'object',
      properties: {
        $ref: {
          type: 'string',
        },
        summary: {
          type: 'string',
        },
        description: {
          type: 'string',
        },
        servers: {
          type: 'array',
          items: {
            $ref: '#/definitions/Server',
          },
        },
        parameters: {
          type: 'array',
          items: {
            oneOf: [
              {
                $ref: '#/definitions/Parameter',
              },
              {
                $ref: '#/definitions/Reference',
              },
            ],
          },
          uniqueItems: true,
        },
      },
      patternProperties: {
        '^(get|put|post|delete|options|head|patch|trace)$': {
          $ref: '#/definitions/Operation',
        },
        '^x-': {},
      },
      additionalProperties: false,
    },
    Operation: {
      type: 'object',
      required: ['responses'],
      properties: {
        tags: {
          type: 'array',
          items: {
            type: 'string',
          },
        },
        summary: {
          type: 'string',
        },
        description: {
          type: 'string',
        },
        externalDocs: {
          $ref: '#/definitions/ExternalDocumentation',
        },
        operationId: {
          type: 'string',
        },
        parameters: {
          type: 'array',
          items: {
            oneOf: [
              {
                $ref: '#/definitions/Parameter',
              },
              {
                $ref: '#/definitions/Reference',
              },
            ],
          },
          uniqueItems: true,
        },
        requestBody: {
          oneOf: [
            {
              $ref: '#/definitions/RequestBody',
            },
            {
              $ref: '#/definitions/Reference',
            },
          ],
        },
        responses: {
          $ref: '#/definitions/Responses',
        },
        callbacks: {
          type: 'object',
          additionalProperties: {
            oneOf: [
              {
                $ref: '#/definitions/Callback',
              },
              {
                $ref: '#/definitions/Reference',
              },
            ],
          },
        },
        deprecated: {
          type: 'boolean',
          default: false,
        },
        security: {
          type: 'array',
          items: {
            $ref: '#/definitions/SecurityRequirement',
          },
        },
        servers: {
          type: 'array',
          items: {
            $ref: '#/definitions/Server',
          },
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    Responses: {
      type: 'object',
      properties: {
        default: {
          oneOf: [
            {
              $ref: '#/definitions/Response',
            },
            {
              $ref: '#/definitions/Reference',
            },
          ],
        },
      },
      patternProperties: {
        '^[1-5](?:\\d{2}|XX)$': {
          oneOf: [
            {
              $ref: '#/definitions/Response',
            },
            {
              $ref: '#/definitions/Reference',
            },
          ],
        },
        '^x-': {},
      },
      minProperties: 1,
      additionalProperties: false,
    },
    SecurityRequirement: {
      type: 'object',
      additionalProperties: {
        type: 'array',
        items: {
          type: 'string',
        },
      },
    },
    Tag: {
      type: 'object',
      required: ['name'],
      properties: {
        name: {
          type: 'string',
        },
        description: {
          type: 'string',
        },
        externalDocs: {
          $ref: '#/definitions/ExternalDocumentation',
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    ExternalDocumentation: {
      type: 'object',
      required: ['url'],
      properties: {
        description: {
          type: 'string',
        },
        url: {
          type: 'string',
          format: 'uri-reference',
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    ExampleXORExamples: {
      description: 'Example and examples are mutually exclusive',
      not: {
        required: ['example', 'examples'],
      },
    },
    SchemaXORContent: {
      description: 'Schema and content are mutually exclusive, at least one is required',
      not: {
        required: ['schema', 'content'],
      },
      oneOf: [
        {
          required: ['schema'],
        },
        {
          required: ['content'],
          description: 'Some properties are not allowed if content is present',
          allOf: [
            {
              not: {
                required: ['style'],
              },
            },
            {
              not: {
                required: ['explode'],
              },
            },
            {
              not: {
                required: ['allowReserved'],
              },
            },
            {
              not: {
                required: ['example'],
              },
            },
            {
              not: {
                required: ['examples'],
              },
            },
          ],
        },
      ],
    },
    Parameter: {
      type: 'object',
      properties: {
        name: {
          type: 'string',
        },
        in: {
          type: 'string',
        },
        description: {
          type: 'string',
        },
        required: {
          type: 'boolean',
          default: false,
        },
        deprecated: {
          type: 'boolean',
          default: false,
        },
        allowEmptyValue: {
          type: 'boolean',
          default: false,
        },
        style: {
          type: 'string',
        },
        explode: {
          type: 'boolean',
        },
        allowReserved: {
          type: 'boolean',
          default: false,
        },
        schema: {
          oneOf: [
            {
              $ref: '#/definitions/Schema',
            },
            {
              $ref: '#/definitions/Reference',
            },
          ],
        },
        content: {
          type: 'object',
          additionalProperties: {
            $ref: '#/definitions/MediaType',
          },
          minProperties: 1,
          maxProperties: 1,
        },
        example: {},
        examples: {
          type: 'object',
          additionalProperties: {
            oneOf: [
              {
                $ref: '#/definitions/Example',
              },
              {
                $ref: '#/definitions/Reference',
              },
            ],
          },
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
      required: ['name', 'in'],
      allOf: [
        {
          $ref: '#/definitions/ExampleXORExamples',
        },
        {
          $ref: '#/definitions/SchemaXORContent',
        },
        {
          $ref: '#/definitions/ParameterLocation',
        },
      ],
    },
    ParameterLocation: {
      description: 'Parameter location',
      oneOf: [
        {
          description: 'Parameter in path',
          required: ['required'],
          properties: {
            in: {
              enum: ['path'],
            },
            style: {
              enum: ['matrix', 'label', 'simple'],
              default: 'simple',
            },
            required: {
              enum: [true],
            },
          },
        },
        {
          description: 'Parameter in query',
          properties: {
            in: {
              enum: ['query'],
            },
            style: {
              enum: ['form', 'spaceDelimited', 'pipeDelimited', 'deepObject'],
              default: 'form',
            },
          },
        },
        {
          description: 'Parameter in header',
          properties: {
            in: {
              enum: ['header'],
            },
            style: {
              enum: ['simple'],
              default: 'simple',
            },
          },
        },
        {
          description: 'Parameter in cookie',
          properties: {
            in: {
              enum: ['cookie'],
            },
            style: {
              enum: ['form'],
              default: 'form',
            },
          },
        },
      ],
    },
    RequestBody: {
      type: 'object',
      required: ['content'],
      properties: {
        description: {
          type: 'string',
        },
        content: {
          type: 'object',
          additionalProperties: {
            $ref: '#/definitions/MediaType',
          },
        },
        required: {
          type: 'boolean',
          default: false,
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    SecurityScheme: {
      oneOf: [
        {
          $ref: '#/definitions/APIKeySecurityScheme',
        },
        {
          $ref: '#/definitions/HTTPSecurityScheme',
        },
        {
          $ref: '#/definitions/OAuth2SecurityScheme',
        },
        {
          $ref: '#/definitions/OpenIdConnectSecurityScheme',
        },
      ],
    },
    APIKeySecurityScheme: {
      type: 'object',
      required: ['type', 'name', 'in'],
      properties: {
        type: {
          type: 'string',
          enum: ['apiKey'],
        },
        name: {
          type: 'string',
        },
        in: {
          type: 'string',
          enum: ['header', 'query', 'cookie'],
        },
        description: {
          type: 'string',
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    HTTPSecurityScheme: {
      type: 'object',
      required: ['scheme', 'type'],
      properties: {
        scheme: {
          type: 'string',
        },
        bearerFormat: {
          type: 'string',
        },
        description: {
          type: 'string',
        },
        type: {
          type: 'string',
          enum: ['http'],
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
      oneOf: [
        {
          description: 'Bearer',
          properties: {
            scheme: {
              enum: ['bearer'],
            },
          },
        },
        {
          description: 'Non Bearer',
          not: {
            required: ['bearerFormat'],
          },
          properties: {
            scheme: {
              not: {
                enum: ['bearer'],
              },
            },
          },
        },
      ],
    },
    OAuth2SecurityScheme: {
      type: 'object',
      required: ['type', 'flows'],
      properties: {
        type: {
          type: 'string',
          enum: ['oauth2'],
        },
        flows: {
          $ref: '#/definitions/OAuthFlows',
        },
        description: {
          type: 'string',
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    OpenIdConnectSecurityScheme: {
      type: 'object',
      required: ['type', 'openIdConnectUrl'],
      properties: {
        type: {
          type: 'string',
          enum: ['openIdConnect'],
        },
        openIdConnectUrl: {
          type: 'string',
          format: 'uri-reference',
        },
        description: {
          type: 'string',
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    OAuthFlows: {
      type: 'object',
      properties: {
        implicit: {
          $ref: '#/definitions/ImplicitOAuthFlow',
        },
        password: {
          $ref: '#/definitions/PasswordOAuthFlow',
        },
        clientCredentials: {
          $ref: '#/definitions/ClientCredentialsFlow',
        },
        authorizationCode: {
          $ref: '#/definitions/AuthorizationCodeOAuthFlow',
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    ImplicitOAuthFlow: {
      type: 'object',
      required: ['authorizationUrl', 'scopes'],
      properties: {
        authorizationUrl: {
          type: 'string',
          format: 'uri-reference',
        },
        refreshUrl: {
          type: 'string',
          format: 'uri-reference',
        },
        scopes: {
          type: 'object',
          additionalProperties: {
            type: 'string',
          },
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    PasswordOAuthFlow: {
      type: 'object',
      required: ['tokenUrl'],
      properties: {
        tokenUrl: {
          type: 'string',
          format: 'uri-reference',
        },
        refreshUrl: {
          type: 'string',
          format: 'uri-reference',
        },
        scopes: {
          type: 'object',
          additionalProperties: {
            type: 'string',
          },
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    ClientCredentialsFlow: {
      type: 'object',
      required: ['tokenUrl'],
      properties: {
        tokenUrl: {
          type: 'string',
          format: 'uri-reference',
        },
        refreshUrl: {
          type: 'string',
          format: 'uri-reference',
        },
        scopes: {
          type: 'object',
          additionalProperties: {
            type: 'string',
          },
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    AuthorizationCodeOAuthFlow: {
      type: 'object',
      required: ['authorizationUrl', 'tokenUrl'],
      properties: {
        authorizationUrl: {
          type: 'string',
          format: 'uri-reference',
        },
        tokenUrl: {
          type: 'string',
          format: 'uri-reference',
        },
        refreshUrl: {
          type: 'string',
          format: 'uri-reference',
        },
        scopes: {
          type: 'object',
          additionalProperties: {
            type: 'string',
          },
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
    },
    Link: {
      type: 'object',
      properties: {
        operationId: {
          type: 'string',
        },
        operationRef: {
          type: 'string',
          format: 'uri-reference',
        },
        parameters: {
          type: 'object',
          additionalProperties: {},
        },
        requestBody: {},
        description: {
          type: 'string',
        },
        server: {
          $ref: '#/definitions/Server',
        },
      },
      patternProperties: {
        '^x-': {},
      },
      additionalProperties: false,
      not: {
        description: 'Operation Id and Operation Ref are mutually exclusive',
        required: ['operationId', 'operationRef'],
      },
    },
    Callback: {
      type: 'object',
      additionalProperties: {
        $ref: '#/definitions/PathItem',
      },
      patternProperties: {
        '^x-': {},
      },
    },
    Encoding: {
      type: 'object',
      properties: {
        contentType: {
          type: 'string',
        },
        headers: {
          type: 'object',
          additionalProperties: {
            $ref: '#/definitions/Header',
          },
        },
        style: {
          type: 'string',
          enum: ['form', 'spaceDelimited', 'pipeDelimited', 'deepObject'],
        },
        explode: {
          type: 'boolean',
        },
        allowReserved: {
          type: 'boolean',
          default: false,
        },
      },
      additionalProperties: false,
    },
  },
}
